package Gather.MapExercise.HashMapDome;

import java.util.*;

/**
 * ClassName:HashMapText003
 * Package:Gather.MapExercise.HashMapExercise
 * Description:
 *
 * @Author:ZhangXin
 * @Create2023/2/20-19:26
 * @Version:v1.0
 */
public class HashMapText003 {
    /*需求
     * 某个班级80名学生,现在需要组成秋游活动,班长提供了四个景点依次是(A,B,C,D),每个学生只能
     * 选择一个景点,请统计出最终哪个景点想去的人数最多
     * */
    /*
     * 判断集合中是否包含该景点
     * 不包含:表示第一次出现
     * 包含:表示已经出现过了*/
    public static void main(String[] args) {
        //需要先让同学们投票
        //定义一个数组,存放4个景点
        String[] arr = {"A", "B", "C", "D"};
        //利用随机数模拟80个同学的投票,并把投票的结果存储起来
        ArrayList<String> list = new ArrayList<>();
        Random r = new Random();
        for (int i = 0; i < 80; i++) {
            int index = r.nextInt(arr.length);
//            System.out.println(arr[index]);
            list.add(arr[index]);
        }
        //如果统计的东西比较多,不方便使用计数器
        //我们可以定义map集合,利用集合进行统计
        HashMap<String, Integer> hm = new HashMap<>();
        for (String name : list) {
            //判断当前的景点在map集合当中是否存在
            if (hm.containsKey(name)) {
                //存在
                //先获取当前景点已经被投票的次数
                Integer count = hm.get(name);
                //当前景点又被投了一次
                count++;
                //把新的次数再次添加到集合当中
                hm.put(name, count);
            } else {
                //不存在
                hm.put(name, 1);
            }
        }
        System.out.println(hm);

        //求最大值
        int max = 0;
        Set<Map.Entry<String, Integer>> entries = hm.entrySet();
        for (Map.Entry<String, Integer> entry : entries) {
            Integer count = entry.getValue();
            if (count > max) {
                max = count;
            }
        }
//        System.out.println(max);
        //判断哪个景点的次数跟最大值一样,如果一样,打印出来
        for (Map.Entry<String, Integer> entry : entries) {
            Integer count = entry.getValue();
            if (count == max) {
                System.out.println("投票最多的景点是:"+entry.getKey()+"景点");
            }
        }
    }
}
